package cn.lizemin.factory.version2.parserFacory;

import java.util.HashMap;

/**
 * @author lzm
 * @version 1.0
 * @description: 为工厂类创建缓存，将客户端对工厂类型的判断单独抽取出来，放到这个类中
 * @date 2022/4/18 11:24
 */
public class ParserFactoryMap {

    /**
     * 方案一：工厂是多例的，每次都是新建一个工厂对象（这不合理，工厂一般都是单例的）
     * @param fileType
     * @return
     */
//    public static ParserFactory getParserFactory(String fileType) {
//        ParserFactory parserFactory = null;
//        if ("doc".equals(fileType)) {
//            parserFactory = new DocParserFactory();
//        } else if ("ppt".equals(fileType)) {
//            parserFactory = new PptParserFactory();
//        } else if ("txt".equals(fileType)) {
//            parserFactory = new TxtParserFactory();
//        } else if ("md".equals(fileType)) {
//            parserFactory = new MdParserFactory();
//        }
//        return parserFactory;
//    }

    /**
     * 方案二：单例工厂
     */
    private static final HashMap<String, ParserFactory> cachedParserFactories  = new HashMap<>();

    static {
        cachedParserFactories.put("md", new MdParserFactory());
        cachedParserFactories.put("ppt", new PptParserFactory());
        cachedParserFactories.put("txt", new TxtParserFactory());
        cachedParserFactories.put("doc", new DocParserFactory());
    }

    public static ParserFactory getParserFactory(String fileType) {
        return cachedParserFactories.get(fileType);
    }


}
